home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d12
/
asmbler.arc
/
MAKE.ASM
< prev
next >
Wrap
Assembly Source File
|
1988-11-19
|
4KB
|
186 lines
MAKESIZ EQU 8192
CUTSPAC EQU 1024 ; 16384 / 16
ASSUME CS:MAKEC,DS:MAKEC,ES:MAKEC,SS:MAKEC
MAKEC SEGMENT PARA PUBLIC 'CODE'
INCLUDE UTIL.INC
ORG 100H
MAKE:
MOV SP,CUTSPAC*16
MOV BX,CUTSPAC
CALL SHRINKSPACE
CALL GETSWITCH
MOV COMMSTR[1],DL
MOV DX,OFFSET MAKENAM
MOV AL,0
CALL OPEN
MOV BX,AX
;read the file into the buffer
MOV CX,MAKESIZ
MOV DX,OFFSET MAKEBUF
CALL READ
MOV CX,AX
CALL CLOSE
MOV SI,OFFSET MAKEBUF
LODSB
DEC CX
START: ;while not end of file do
CALL WHILEWHITE
CMP CX,0
JG NXT3
JMP NORMAL
NXT3: ; parse up to the colon
MOV DI,OFFSET NAMEBUF
CALL WHILEBLACK
MOV BYTE PTR [DI-1],NUL
; if file exists then read date else goto domake
XCHG AX,BX
MOV DX,OFFSET NAMEBUF
MOV AL,0
MOV AH,3DH
INT 21H
XCHG AX,BX
JC DOMAKE
PUSH CX
PUSH AX
CALL GETDATE
MOV MADEDAT[0],CX
MOV MADEDAT[2],DX
CALL CLOSE
POP AX
POP CX
CALL WHILEWHITE
DOFILE: ; while parse a filename do
CMP AL,'<'
JE SKIPMAKE
MOV DI,OFFSET NAMEBUF
CALL WHILEBLACK
; read date
PUSH AX
MOV DX,OFFSET NAMEBUF
MOV AL,0
CALL OPEN
PUSH CX
MOV BX,AX
CALL GETDATE
CALL CLOSE
LES DI,DWORD PTR MADEDAT
CALL CMPDATE
PUSH DS
POP ES
POP CX
POP AX
JB DOMAKE
; loop
CALL WHILEWHITE
JMP DOFILE
DOMAKE: ; skip to where the @ is the first character on the line
CMP AL,'<'
JE NXT4
LODSB
DEC CX
JMP DOMAKE
NXT4: LODSB
DEC CX
CALL WHILEWHITE
DOPARS: ; while first of line <> '>' do
CMP AL,'>'
JE NXT5
; parse to the end of line
MOV DI,OFFSET NAMEBUF
NXT6: CMP AL,LF
JE NXT7
STOSB
LODSB
DEC CX
JMP NXT6
NXT7: ; print the line
MOV BYTE PTR [DI],NUL
MOV BX,STDOUT
MOV DX,OFFSET NAMEBUF
CALL FWRITESTR
; execute command.com with the line as the parameter
MOV DX,DI
SUB DX,OFFSET COMMSTR + 2
MOV COMMSTR[0],DL
MOV DX,OFFSET COMMSTR
CALL EXECOMM
CALL WHILEWHITE
JMP DOPARS
SKIPMAKE:
CMP AL,'>'
JE NXT5
LODSB
DEC CX
JMP SKIPMAKE
NXT5:
LODSB
DEC CX
JMP START
ASSUME CS:MAKEC,DS:MAKEC,ES:MAKEC,SS:MAKEC
MWHILEWHITE MACRO
LOCAL NXT2
WHILEWHITE:
CMP AL,' '
JE NXT2
CMP AL,CR
JE NXT2
CMP AL,LF
JE NXT2
CMP AL,TAB
JE NXT2
RET
NXT2: ; STOSB
LODSB
DEC CX
JMP WHILEWHITE
ENDM
MWHILEBLACK MACRO
LOCAL NXT2
WHILEBLACK:
CMP AL,' '
JE NXT2
CMP AL,CR
JE NXT2
CMP AL,LF
JE NXT2
CMP AL,TAB
JE NXT2
STOSB
LODSB
DEC CX
JMP WHILEBLACK
NXT2: MOV BYTE PTR [DI],NUL
RET
ENDM
MWHILEWHITE
MWHILEBLACK
MNORMAL
MWRITESTR
MWRITELN
MERROR
MCMPDATE
MSHRINKSPACE
MOPEN
MCLOSE
MREAD
MGETDATE
MEXECOMM
MGETSWITCH
MAKENAM DB 'MAKEFILE',0
COMMSTR DB 0,'/C '
NAMEBUF DB 64 DUP (?)
EVEN
MADEDAT DW 2 DUP (?)
MAKEBUF DB
MAKEC ENDS
END MAKE